Template: Concept

템플릿 매개변수를 모든 타입으로 대체하여 사용할 수 있을 것 같지만,
실은 템플릿 클래스와 템플릿 함수를 만드는 프로그래머는 템플릿 인수에서 수행할 수 있는 연산을 가정한다.

따라서 템플릿을 이용할 때, 어떤 인수 타입이 허용되는지 알아낼 수 있어야 한다.
이와 같은 타입의 요구사항의 집합을 컨셉(Concept)라고 한다.

컨셉 C의 모든 요구사항과 추가할 수 있는 한 요구 사항을 포함하는 컨셉 CR을 C의 개량(Refinement)라고 한다.

컨셉 C의 모든 요구사항을 충족하는 타입 t를 C의 모델(Model)이라고 한다.
템플릿 클래스와 템플릿 함수의 완전한 정의에는
필요한 컨셉 목록을 포함해야 한다.
ex)
T는 복사생성이 가능하다. 즉, b의 타입이 T일 때 T a(b); 컴파일 가능
T는 덧셈할당이 가능하다. a와 b가 T 타입일 때, a+=b; 컴파일 가능
T는 int에서 구성될 수 있다. T a(0); 컴파일 가능